perm filename NLF.SAI[SYS,HE]5 blob sn#084254 filedate 1974-01-24 generic text, type T, neo UTF8
00100	COMMENT ⊗   VALID 00003 PAGES
00200	C REC  PAGE   DESCRIPTION
00300	C00001 00001
00400	C00002 00002	BEGIN "NLF"
00500	C00007 00003	PUT_DATA(0,0,"NLF")
00600	C00010 ENDMK
00700	C⊗;
     

00100	BEGIN "NLF"
00200	REQUIRE "PREAMB.sai[SYS,HE]" SOURCE_FILE;
00300	REQUIRE 200 STRING_SPACE;
00400	DEFINE CRLF="'15&'12";
00500	PRELOAD_WITH 0, 0, 0.4, 1.0;
00600	SAFE REAL ARRAY SL[1:4];
00700	SAFE REAL ARRAY NULL[1:4];
00800	PRELOAD_WITH 	 0.00000, -1.00000,  0.00000, 10.0,
00900			-1.00000,  0.00000,  0.00000, 25.0,	
01000			 0.00000,  0.00000, -1.00000,  1.0,
01100			 0.00000,  0.00000,  0.00000,  1.0;
01200	REAL ARRAY X1[1:4,1:4];
01300	PRELOAD_WITH 	 0.00000, -1.00000,  0.00000, 20.0,
01400			-1.00000,  0.00000,  0.00000, 25.0,
01500			 0.00000,  0.00000, -1.00000,  1.2,
01600			 0.00000,  0.00000,  0.00000,  1.0;
01700	REAL ARRAY X2[1:4,1:4];
01800	PRELOAD_WITH 	 0.00000, -1.00000,  0.00000, 30.0,
01900			-1.00000,  0.00000,  0.00000, 25.0,
02000			 0.00000,  0.00000, -1.00000,  0.9,
02100			 0.00000,  0.00000,  0.00000,  1.0;
02200	REAL ARRAY X3[1:4,1:4];
02300	PRELOAD_WITH 	-1.00000,  0.00000,  0.00000, 30.0,
02400			 0.00000,  1.00000,  0.00000, 25.0,
02500			 0.00000,  0.00000, -1.00000,  0.9,
02600			 0.00000,  0.00000,  0.00000,  1.0;
02700	REAL ARRAY SQAR[1:4,1:4];
02800	PRELOAD_WITH 0,0,0,1;
02900	REAL ARRAY ZERO[1:4];
03000	INTEGER I,M;
03100	BOOLEAN FIRST;
03200	STRING S;
03300	LABEL L1;
03400	SIMPLE PROCEDURE SORRY;
03500	BEGIN	OUTSTR("SORRY"&CRLF&CRLF);
03600		CALL(0,"EXIT");
03700	END;
03800	
03900	SIMPLE PROCEDURE MOVE_IT(REAL ARRAY A,B);
04000	BEGIN	INTEGER PLAN_SAV;
04100		A[3,4]←A[3,4]-1.00;
04200		B[3,4]←B[3,4]+1.0;
04300		ISSUE(5,"NLF","HAND",MESSAGE START_TRAJECTORY("HANOI",0));
04400		ISSUE(5,"NLF","HAND",MESSAGE OPEN_HAND(3));
04500		ISSUE(7,"NLF","HAND",MESSAGE MOVE_ARM(A,ARM_PLAN));
04600		IF ARM_PLAN THEN BEGIN
04700			ISSUE(5,"NLF","HAND",MESSAGE CLOSE_HAND(0.5));
04800			ISSUE(5,"NLF","HAND",MESSAGE MOVE_ARM(B,ARM_PLAN));
04900			ISSUE(5,"NLF","HAND",MESSAGE PLACE_ARM);
05000			ISSUE(7,"NLF","HAND",MESSAGE OPEN_HAND(3.0));
05100			IF (PLAN_SAV←ARM_PLAN) THEN BEGIN SQAR[1,4]←B[1,4];SQAR[2,4]←B[2,4];SQAR[3,4]←B[3,4]←B[3,4]-1;
05200			ISSUE(5,"NLF","HAND",MESSAGE ARM_CONO(SL,NULL,0,0));
05300			ISSUE(5,"NLF","HAND",MESSAGE MOVE_ARM(SQAR,ARM_PLAN));
05400			ISSUE(5,"NLF","HAND",MESSAGE CLOSE_HAND(0.5));
05500			ISSUE(5,"NLF","HAND",MESSAGE OPEN_HAND(3.0));
05600			B[3,4]←B[3,4]+1;
05700			ISSUE(7,"NLF","HAND",MESSAGE CLOSE_TRAJECTORY);
05800		END;
05900		END;
06000		IF ¬PLAN_SAV  THEN BEGIN
06100			OUTSTR("I CANNOT REACH THE BLOCK AT "
06200			&"("&CVS(A[1,4])&","&CVS(A[2,4])&")"&CRLF&
06300			"PLEASE MOVE IT TO "
06400			&"("&CVS(B[1,4])&","&CVS(B[2,4])&") AND TYPE C/R"&CRLF&CRLF);
06500			INCHWL;
06600			OUTSTR("THANK YOU"&CRLF&CRLF);
06700		END ELSE BEGIN
06800			ISSUE(7,"NLF","HAND",MESSAGE DO_IT(0,"HANOI"));
06900			IF ARM_STATUS THEN OUTSTR(CVOS(ARM_STATUS)&" SORRY, YOU WILL HAVE TO DO IT FOR ME"&CRLF);
07000		END;
07100	END;
07200	
07300	RECURSIVE PROCEDURE STACK(INTEGER H;REAL ARRAY A,B,C);
07400	BEGIN	IF H=1 THEN
07500		BEGIN	MOVE_IT(A,B);
07600			RETURN ;
07700		END;
07800		H←H-1;
07900		STACK(H,A,C,B);
08000		MOVE_IT(A,B);
08100		STACK(H,C,B,A);
08200	END;
     

00100	PUT_DATA(0,0,"NLF");
00200	WHILE ¬ YES_HAND DO CALL(1,"SLEEP");
00300	OUTSTR("DRIVE INITIALIZED"&CRLF&CRLF);
00400	DO BEGIN
00500	ISSUE(5,"NLF","HAND",MESSAGE START_TRAJECTORY ("H00000",0));
00600	ISSUE(5,"NLF","HAND",MESSAGE PARK_ARM);
00700	ISSUE(5,"NLF","HAND",MESSAGE OPEN_HAND(3));
00800	ISSUE(5,"NLF","HAND",MESSAGE CLOSE_TRAJECTORY);
00900	OUTSTR("STAND CLEAR OF THE ARM AND TYPE C/R
01000	");
01100	INCHWL;
01200	ISSUE(7,"NLF","HAND",MESSAGE DO_IT(0,"H00000"));
01300	IF ARM_STATUS THEN BEGIN OUTSTR(CVOS(ARM_STATUS)&" PLEASE CHECK THE ARM & TYPE C/R"&'15&'12);
01400		INCHWL;
01500	END;
01600	END UNTIL ¬ARM_STATUS;
01700	OUTSTR("PLACE BLOCKS AT (10,25) AND TYPE THE HEIGHT"
01800	&CRLF&CRLF);
01900	SETFORMAT(0,1);
02000	X1[3,4]←0.8;
02100	X2[3,4]←0.8;
02200	X3[3,4]←0.8;
02300	S←INCHWL;
02400	I←INTSCAN(S,M);
02500	IF I<1 THEN BEGIN OUTSTR("WE CANNOT MOVE BELOW THE TABLE"&CRLF&CRLF);
02600		SORRY;END;
02700	M←2↑I-1;
02800	OUTSTR("THAT'S "&CVS(M)& " MOVES, KEEP YOUR FINGERS CROSSED"&CRLF&CRLF);
02900	SETFORMAT(-5,0);
03000	X1[3,4]←X1[3,4]+I;
03100	ISSUE(5,"NLF","HAND",MESSAGE START_TRAJECTORY ("H00000",0));
03200	ISSUE(5,"NLF","HAND",MESSAGE MOVE_ARM(X1,ARM_PLAN));
03300	ISSUE(5,"NLF","HAND",MESSAGE CLOSE_TRAJECTORY);
03400	ISSUE(7,"NLF","HAND",MESSAGE DO_IT(0,"H00000"));
03500	IF ARM_STATUS THEN OUTSTR(CVOS(ARM_STATUS)&" PLEASE CHECK THE ARM & TYPE C/R"&'15&'12);
03600	OUTSTR("THIS IS WHERE THE ARM THINKS THE BLOCKS SHOULD BE
03700	TYPE C/R TO PROCEED
03800	");
03900	INCHWL;
04000	STACK(I,X1,X2,X3);
04100	M←ISSUE(5,"NLF","HAND",MESSAGE START_TRAJECTORY("HANOI",0));
04200	ISSUE(5,"NLF","HAND",MESSAGE PARK_ARM);
04300	ISSUE(7,"NLF","HAND",MESSAGE CLOSE_TRAJECTORY);
04400	ISSUE(7,"NLF","HAND",MESSAGE DO_IT(0,"HANOI"));
04500	IF ARM_STATUS THEN OUTSTR("DID I HIT SOMEBODY!"&'15&'12) ELSE
04600	OUTSTR("IF THAT HAD BEEN 64 BLOCKS THE WORLD WOULD HAVE JUST ENDED!
04700	THANK YOU AND GOOD NIGHT."&CRLF&CRLF);
04800	END;